电子文档解析接口从文档本身的半结构化内容中解析出所包含的信息,提供包括pdf、word、excel、html、epub、mobi、markdown、txt的电子解析能力,生成文档智能中支持的结构化对象。本文介绍了电子文档解析API的调用方式。在调用OpenAPI接口前,请先阅读API使用指南。
调用方式
电子文档解析接口为同步接口,调用SubmitDigitalDocStructureJob或者SubmitDigitalDocStructureJobAdvance接口均可进行同步任务提交,等待超时时间可设置为5分钟。
支持的格式:html、pdf、ppt、pptx、xlsx、xls、doc、docx、mobi、epub、markdown、txt。
调用电子文档解析提交服务SubmitDigitalDocStructureJob接口
同步提交服务支持上传本地文件和url文件两种方式:
本地文件上传的同步提交服务接口为:SubmitDigitalDocStructureJobAdvance接口。
url上传的同步提交服务接口为:SubmitDigitalDocStructureJob接口。
请求参数
名称 | 类型 | 必填 | 描述 | 示例值 |
FileUrl | string | 是 | 以文档url方式时使用。单个文档限制大小为150MB以内,页数1.5万页以内。 | https://example.com/example.xlsx |
FileUrlObject | stream | 是 | 以本地文件上传方式调用接口时使用。单个文档限制大小为100MB以内,页数为1000页以内。 | 本地文件生成的FileInputStream |
FileName | string | 否 | 文件名需带文件类型后缀,与fileNameExtension二选一。 | example.xlsx |
FileNameExtension | string | 否 | 文件类型,与fileName二选一。 | xlsx |
RevealMarkdown | boolean | 否 | 是否输出markdown类型文本。 | true |
ImageStrategy | String | 否 | markdownContent中图片存储方式。 | url:提供oss url(含有效期) base64: 提供base64字段 |
UseUrlResponseBody | bool | 否 | 是否以url方式返回结果,默认为false。 | true |
开启markdown输出后,ImageStrategy才能生效。ImageStrategy参数用于控制markdown内图片存储方式,base64适合较小文件,建议小于1M的图片使用base64。推荐使用url,但注意url会有时效期,一般为12小时。
根据您计算机的规格大小,如果上传的文件较大或者文件内容较多 ,建议开启UseUrlResponseBody,可以有效避免接口超时等问题,但注意url会有时效期,一般为12小时。
返回参数
名称 | 类型 | 描述 | 示例值 |
RequestId | string | 请求唯一ID。 | 43A29C77-405E-4CC0-BC55-EE694AD0**** |
Id | String | 订单ID。 | docmind-20220712-b15f**** |
Status | String | 同步任务处理完成的状态,最终处理结束后的状态。Success为处理成功,Fail为处理失败。 | Success |
Data | map | 返回数据,电子解析的解析结果,输出包括文档内容及样式、文档逻辑信息(层级树)的JSON数据结构返回。 | - |
Code | string | 状态码。 | 200 |
Message | string | 详细信息。 | Message |
使用示例
本接口支持本地文档上传和传入文档url这两种调用方式。
以Java SDK为例,本地文档上传调用方式的请求示例代码如下,调用电子文档解析提交服务SubmitDigitalDocStructureJobAdvance接口,通过fileUrlObject参数实现本地文档上传。
说明获取并使用AccessKey信息的方式,可参考SDK概述中不同语言的SDK使用指南。
import com.aliyun.docmind_api20220711.models.*; import com.aliyun.teaopenapi.models.Config; import com.aliyun.docmind_api20220711.Client; import com.aliyun.teautil.models.RuntimeOptions; import java.io.File; import java.io.FileInputStream; public static void main(String[] args) throws Exception { submit(); } public static void submit() throws Exception { // 使用默认凭证初始化Credentials Client。 com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(); Config config = new Config() // 通过credentials获取配置中的AccessKey ID .setAccessKeyId(credentialClient.getAccessKeyId()) // 通过credentials获取配置中的AccessKey Secret .setAccessKeySecret(credentialClient.getAccessKeySecret()); // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com config.endpoint = "docmind-api.cn-hangzhou.aliyuncs.com"; Client client = new Client(config); // 创建RuntimeObject实例并设置运行参数 RuntimeOptions runtime = new RuntimeOptions(); SubmitDigitalDocStructureJobAdvanceRequest request = new SubmitDigitalDocStructureJobAdvanceRequest(); File file = new File("D:\\example.xlsx"); request.fileUrlObject = new FileInputStream(file); request.fileName = "example.xlsx"; request.revealMarkdown=true; // 发起请求并处理应答或异常。 SubmitDigitalDocStructureJobResponse response = client.submitDigitalDocStructureJobAdvance(request, runtimeOptions); System.out.println(JSON.toJSON(response.getBody())); }
const Client = require('@alicloud/docmind-api20220711'); const Credential = require('@alicloud/credentials'); const Util = require('@alicloud/tea-util'); const fs = require('fs'); const getResult = async () => { // 使用默认凭证初始化Credentials Client const cred = new Credential.default(); const client = new Client.default({ // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com endpoint: 'docmind-api.cn-hangzhou.aliyuncs.com', // 通过credentials获取配置中的AccessKey ID accessKeyId: cred.credential.accessKeyId, // 通过credentials获取配置中的AccessKey Secret accessKeySecret: cred.credential.accessKeySecret, type: 'access_key', regionId: 'cn-hangzhou' }); const advanceRequest = new Client.SubmitDigitalDocStructureJobAdvanceRequest(); const file = fs.createReadStream('./example.pdf'); advanceRequest.fileUrlObject = file; advanceRequest.fileName = 'example.pdf'; const runtimeObject = new Util.RuntimeOptions({}); const response = await client.submitDigitalDocStructureJobAdvance(advanceRequest, runtimeObject); return response.body; };
from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models from alibabacloud_tea_util.client import Client as UtilClient from alibabacloud_tea_util import models as util_models from alibabacloud_credentials.client import Client as CredClient if __name__ == '__main__': # 使用默认凭证初始化Credentials Client。 cred=CredClient() config = open_api_models.Config( # 通过credentials获取配置中的AccessKey ID access_key_id=cred.get_credential().get_access_key_id(), # 通过credentials获取配置中的AccessKey Secret access_key_secret=cred.get_credential().get_access_key_secret() ) # 访问的域名 config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com' client = docmind_api20220711Client(config) request = docmind_api20220711_models.SubmitDigitalDocStructureJobAdvanceRequest( # file_url_object : 本地文件流 file_url_object=open("./example.xlsx", "rb"), # file_name :文件名称。名称必须包含文件类型 file_name='123.xlsx', reveal_markdown=True, # file_name_extension : 文件后缀格式。与文件名二选一 # file_name_extension='xlsx' ) runtime = util_models.RuntimeOptions() try: # 复制代码运行请自行打印 API 的返回值 response = client.submit_digital_doc_structure_job_advance(request, runtime) # API返回值格式层级为 body -> data -> 具体属性。 print(response.body) except Exception as error: # 如有需要,请打印 error UtilClient.assert_as_string(error.message)
import ( "fmt" "os" openClient "github.com/alibabacloud-go/darabonba-openapi/v2/client" "github.com/alibabacloud-go/docmind-api-20220711/client" "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/aliyun/credentials-go/credentials" ) func submit(){ // 使用默认凭证初始化Credentials Client。 credential, err := credentials.NewCredential(nil) // 通过credentials获取配置中的AccessKey ID accessKeyId, err := credential.GetAccessKeyId() // 通过credentials获取配置中的AccessKey Secret accessKeySecret, err := credential.GetAccessKeySecret() // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com var endpoint string = "docmind-api.cn-hangzhou.aliyuncs.com" config := openClient.Config{AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, Endpoint: &endpoint} // 初始化client cli, err := client.NewClient(&config) if err != nil { panic(err) } // 上传本地文档调用接口 filename := "D:\\example.pdf" f, err := os.Open(filename) if err != nil { panic(err) } // 初始化接口request request := client.SubmitDigitalDocStructureJobAdvanceRequest{ FileName: &filename, FileUrlObject: f, } // 创建RuntimeObject实例并设置运行参数 options := service.RuntimeOptions{} response, err := cli.SubmitDigitalDocStructureJobAdvance(&request, &options) if err != nil { panic(err) } // 打印结果 fmt.Println(response.Body.String()) }
using Newtonsoft.Json; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using Tea; using Tea.Utils; public static void SubmitFile() { // 使用默认凭证初始化Credentials Client。 var akCredential = new Aliyun.Credentials.Client(null); AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { // 通过credentials获取配置中的AccessKey Secret AccessKeyId = akCredential.GetAccessKeyId(), // 通过credentials获取配置中的AccessKey Secret AccessKeySecret = akCredential.GetAccessKeySecret(), }; // 访问的域名 config.Endpoint = "docmind-api.cn-hangzhou.aliyuncs.com"; AlibabaCloud.SDK.Docmind_api20220711.Client client = new AlibabaCloud.SDK.Docmind_api20220711.Client(config); //需要安装额外的依赖库--> AlibabaCloud.DarabonbaStream Stream bodySyream = AlibabaCloud.DarabonbaStream.StreamUtil.ReadFromFilePath("<YOUR-FILE-PATH>"); AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitDigitalDocStructureJobAdvanceRequest request = new AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitDigitalDocStructureJobAdvanceRequest { FileUrlObject = bodySyream, FileNameExtension = "pdf" }; AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 client.SubmitDigitalDocStructureJobAdvance(request, runtime); } catch (TeaException error) { // 如有需要,请打印 error AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); } catch (Exception _error) { TeaException error = new TeaException(new Dictionary<string, object> { { "message", _error.Message } }); // 如有需要,请打印 error AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); } }
以Java SDK为例,传入文档url调用方式的请求示例代码如下,调用SubmitDigitalDocStructureJob接口,通过fileUrl参数实现传入文档url。请注意,您传入的文档url必须为公网可访问下载的url地址,无跨域限制,url不带特殊转义字符。
说明获取并使用AccessKey信息的方式,可参考SDK概述中不同语言的SDK使用指南。
import com.aliyun.docmind_api20220711.models.*; import com.aliyun.teaopenapi.models.Config; import com.aliyun.docmind_api20220711.Client; public static void main(String[] args) throws Exception { submit(); } public static void submit() throws Exception { // 使用默认凭证初始化Credentials Client。 com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(); Config config = new Config() // 通过credentials获取配置中的AccessKey ID .setAccessKeyId(credentialClient.getAccessKeyId()) // 通过credentials获取配置中的AccessKey Secret .setAccessKeySecret(credentialClient.getAccessKeySecret()); // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com config.endpoint = "docmind-api.cn-hangzhou.aliyuncs.com"; Client client = new Client(config); SubmitDigitalDocStructureJobRequest request = new SubmitDigitalDocStructureJobRequest(); request.fileName = "example.xlsx"; request.fileUrl = "https://example.com/example.xlsx"; request.revealMarkdown=true; SubmitDigitalDocStructureJobResponse response = client.submitDigitalDocStructureJob(request); System.out.println(JSON.toJSON(response.getBody())); }
const Client = require('@alicloud/docmind-api20220711'); const Credential = require('@alicloud/credentials'); const getResult = async () => { // 使用默认凭证初始化Credentials Client const cred = new Credential.default(); const client = new Client.default({ // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com endpoint: 'docmind-api.cn-hangzhou.aliyuncs.com', // 通过credentials获取配置中的AccessKey ID accessKeyId: cred.credential.accessKeyId, // 通过credentials获取配置中的AccessKey Secret accessKeySecret: cred.credential.accessKeySecret, type: 'access_key', regionId: 'cn-hangzhou' }); const request = new Client.SubmitDigitalDocStructureJobRequest(); request.fileName = 'example.pdf'; request.fileUrl = 'https://example.com/example.pdf'; const response = await client.submitDocStructureJob(request); return response.body; }
from alibabacloud_docmind_api20220711.client import Client as docmind_api20220711Client from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_docmind_api20220711 import models as docmind_api20220711_models from alibabacloud_tea_util.client import Client as UtilClient from alibabacloud_credentials.client import Client as CredClient if __name__ == '__main__': # 使用默认凭证初始化Credentials Client。 cred=CredClient() config = open_api_models.Config( # 通过credentials获取配置中的AccessKey ID access_key_id=cred.get_credential().get_access_key_id(), # 通过credentials获取配置中的AccessKey Secret access_key_secret=cred.get_credential().get_access_key_secret() ) # 访问的域名 config.endpoint = f'docmind-api.cn-hangzhou.aliyuncs.com' client = docmind_api20220711Client(config) request = docmind_api20220711_models.SubmitDigitalDocStructureJobRequest( # file_url : 文件url地址 file_url='https://example.com/example.xlsx', # file_name :文件名称。名称必须包含文件类型 file_name='123.xlsx', reveal_markdown=True, # file_name_extension : 文件后缀格式。与文件名二选一 # file_name_extension='xlsx' ) try: # 复制代码运行请自行打印 API 的返回值 response = client.submit_digital_doc_structure_job(request) # API返回值格式层级为 body -> data -> 具体属性。 print(response.body) except Exception as error: # 如有需要,请打印 error UtilClient.assert_as_string(error.message)
import ( "fmt" openClient "github.com/alibabacloud-go/darabonba-openapi/v2/client" "github.com/alibabacloud-go/docmind-api-20220711/client" "github.com/aliyun/credentials-go/credentials" ) func submit(){ // 使用默认凭证初始化Credentials Client。 credential, err := credentials.NewCredential(nil) // 通过credentials获取配置中的AccessKey ID accessKeyId, err := credential.GetAccessKeyId() // 通过credentials获取配置中的AccessKey Secret accessKeySecret, err := credential.GetAccessKeySecret() // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com var endpoint string = "docmind-api.cn-hangzhou.aliyuncs.com" config := openClient.Config{AccessKeyId: accessKeyId, AccessKeySecret: accessKeySecret, Endpoint: &endpoint} // 初始化client cli, err := client.NewClient(&config) if err != nil { panic(err) } // 文件URL fileURL := "https://example.com/example.pdf" // 文件名 fileName := "example.pdf" // 初始化接口request request := client.SubmitDigitalDocStructureJobRequest{ FileUrl: &fileURL, FileName: &fileName, } response, err := cli.SubmitDigitalDocStructureJob(&request) if err != nil { panic(err) } // 打印结果 fmt.Println(response.Body.String()) }
using Newtonsoft.Json; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using Tea; using Tea.Utils; public static void SubmitUrl() { // 使用默认凭证初始化Credentials Client。 var akCredential = new Aliyun.Credentials.Client(null); AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { // 通过credentials获取配置中的AccessKey Secret AccessKeyId = akCredential.GetAccessKeyId(), // 通过credentials获取配置中的AccessKey Secret AccessKeySecret = akCredential.GetAccessKeySecret(), }; // 访问的域名 config.Endpoint = "docmind-api.cn-hangzhou.aliyuncs.com"; AlibabaCloud.SDK.Docmind_api20220711.Client client = new AlibabaCloud.SDK.Docmind_api20220711.Client(config); AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitDigitalDocStructureJobRequest request = new AlibabaCloud.SDK.Docmind_api20220711.Models.SubmitDigitalDocStructureJobRequest { FileUrl = "https://example.pdf", FileNameExtension = "pdf" }; try { // 复制代码运行请自行打印 API 的返回值 client.SubmitDigitalDocStructureJob(request); } catch (TeaException error) { // 如有需要,请打印 error AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); } catch (Exception _error) { TeaException error = new TeaException(new Dictionary<string, object> { { "message", _error.Message } }); // 如有需要,请打印 error AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message); } }
use AlibabaCloud\SDK\Docmindapi\V20220711\Docmindapi; use AlibabaCloud\SDK\Docmindapi\V20220711\Models\SubmitDocStructureJobRequest; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; use AlibabaCloud\Tea\Exception\TeaUnableRetryError; use AlibabaCloud\Credentials\Credential; // 使用默认凭证初始化Credentials Client。 $bearerToken = new Credential(); $config = new Config(); // 访问的域名,支持ipv4和ipv6两种方式,ipv6请使用docmind-api-dualstack.cn-hangzhou.aliyuncs.com $config->endpoint = "docmind-api.cn-hangzhou.aliyuncs.com"; // 通过credentials获取配置中的AccessKey ID $config->accessKeyId = $bearerToken->getCredential()->getAccessKeyId(); // 通过credentials获取配置中的AccessKey Secret $config->accessKeySecret = $bearerToken->getCredential()->getAccessKeySecret(); $config->type = "access_key"; $config->regionId = "cn-hangzhou"; $client = new Docmindapi($config); $request = new SubmitDigitalDocStructureJobRequest(); $runtime = new RuntimeOptions(); $runtime->maxIdleConns = 3; $runtime->connectTimeout = 10000; $runtime->readTimeout = 10000; $request->fileName = "example.pdf"; $request->fileUrl = "https://example.com/example.pdf"; try { $response = $client->submitDigitalDocStructureJob($request, $runtime); var_dump($response->toMap()); } catch (TeaUnableRetryError $e) { var_dump($e->getMessage()); var_dump($e->getErrorInfo()); var_dump($e->getLastException()); var_dump($e->getLastRequest()); }
处理成功后Status返回值为Success,表示处理成功。处理成功返回结果示例如下:
{
"data":{
"docInfo":{
"pageCountEstimate":3,
"docType":"pdf"
},
"styles":[ ],
"layouts":[
{
"pos":[
{
"x":0,
"y":0
},
{
"x":1113,
"y":0
},
{
"x":1113,
"y":1440
},
{
"x":0,
"y":1440
}
],
"index":0,
"subType":"none",
"text":"",
"type":"image",
"pageNum":[
0
],
"uniqueId":"31128703ac73c52f05717b3b654de020"
},
{
"pos":[
{
"x":0,
"y":0
},
{
"x":1113,
"y":0
},
{
"x":1113,
"y":1440
},
{
"x":0,
"y":1440
}
],
"index":0,
"subType":"none",
"text":"",
"type":"image",
"pageNum":[
1
],
"uniqueId":"25b2a6f63bdf57f0d7a4f3da67c8616a"
},
{
"pos":[
{
"x":0,
"y":0
},
{
"x":1113,
"y":0
},
{
"x":1113,
"y":1440
},
{
"x":0,
"y":1440
}
],
"index":0,
"subType":"none",
"text":"",
"type":"image",
"pageNum":[
2
],
"uniqueId":"8c651c04c72a029b4be4ed80aa57fbbd"
}
],
"version":"1.2.0",
"requestId":"docmind-20240820-6bf3e1bc1f164f0c99b8a12cfbcbeXXX"
},
"requestId":"1556A10B-E31C-5B21-8A5E-2179069D2XXX",
"id":"docmind-20240820-6bf3e1bc1f164f0c99b8a12cfbcbeXXX",
"status":"Success"
}
具体的处理结果在Data节点中,如下为Data节点的具体格式:
Data | object | 解析结果 |
styles | array | 样式列表(全文档中block的去重样式列表)。 |
styleId | int | 样式ID。 |
underline | bool | 是否有下划线。 |
deleteLine | bool | 是否有删除线。 |
bold | bool | 是否加粗。 |
fontSize | int | 字号大小。 |
fontName | string | 字体名称。 |
color | string | 文字颜色。 |
charScale | float | 对齐宽高比例尺字体高度不变的情况下,宽度会有变化,计算逻辑为宽/高。 |
layouts | array | 版面信息列表。 |
uniqueId | string | 版面信息唯一ID。 |
index | int | 版面阅读顺序。 |
type | string | 版面类型(text/table/image)。 |
text | string | 文本内容。 |
markdownContent | string | markdown 文本内容(开启参数后支持)。 |
alignment | string | 间距枚举。 |
pos | array | 坐标。 |
pageNum | array | 版面所在页数(可能多页)。 |
numCol | int | 表格总列数(表格版面类型特有)。 |
numRow | int | 表格总行数(表格版面类型特有)。 |
cells | string | 单元格信息(类型是表格才有)。 |
cellId | string | 单元格Id(单个版面信息中唯一)。 |
cellUniqueId | string | 单元格Id(全局唯一)。 |
type | string | 单元格类型。 |
alignment | string | 单元格对齐方式。 |
pageNum | array | 单元格所在页数(可能多页)。 |
xsc | int | 起始单元格横向是第几列。 |
ysc | int | 起始单元格纵向是第几行。 |
xec | int | 结束单元格横向是第几列。 |
yec | int | 结束单元格纵向是第几行。 |
pos | array | 单元格坐标。 |
text | string | 单元格文本内容。 |
layouts | array | 内嵌版面信息。 |
logics | array | 逻辑信息列表。 |
docTree | array | 层级树信息列表。 |
uniqueId | string | 层级树节点的唯一ID。 |
level | int | 节点层级。 |
link | object | 子节点。 |
backlink | object | 父节点。 |
docInfo | object | 文档信息。 |
docType | string | 文档类型。 |
imageCount | int | 图片数量。 |
tableCount | int | 表格数量。 |
pageCountEstimate | int | 文档页数。 |
paragraphCount | int | 段落数量。 |
tokens | long | 英文单词数,或中文字数。 |
docUrl | string | 文档url地址。 |
orignalDocName | string | 用户提供的原始文档名称。 |
originalDocUrl | string | 用户提供的原始文档url地址。 |
pages | array | 文档页面列表。 |
场景示例
本内容阐述获取JSON后,场景处理使用上建议和方案。
获取markdown信息
GetDocStructureResult设置RevealMarkdown为true,ImageStrategy为url。
import json
response = json.load(open("demo.json", "r"))
doc_json = response["Data"]
markdown_str = ""
for layout in doc_json["layouts"]:
markdown_str += layout["markdownContent"] + "\n"
print(markdown_str)
获取指定层级内容
SubmitDocStructureJob/SubmitDocStructureJobAdvance接口中,设置doc_tree或default,用于获取文档的结构信息。
import json
response = json.load(open("demo.json", "r"))
doc_json = response["Data"]
doc_tree = doc_json["logics"]["docTree"]
layout_cache: {} = {}
for layout in doc_json["layouts"]:
layout_cache[layout["uniqueId"]] = layout
layout["children"] = list()
for node in doc_tree:
father = node["backlink"]["上级"][0]
child = node["uniqueId"]
if father in layout_cache:
# 设置 子layout
layout_cache[father]["children"].append(layout_cache[child])
for layout in doc_json["layouts"]:
# 当前layout下的子layout
print(layout["children"])
附录
doc-json数据结构
VERSION(STRING: DOC-JSON版本信息)
Doc-json | styles(array:无重复的样式集合) |
layouts(array:版面信息列表,不包含坐标信息) | |
logics(object:逻辑信息,只含层级树) | |
doclnfo(object:文档信息) | |
version(string:doc-json版本信息) |
版面类型
文档智能解析返回结果中,版面的类型type及子类型subType列表如下:
type(类型) | 类型描述 | subType(子类型) | 子类型描述 |
title | 标题 | 无 | 无 |
table | 表格 | 无 | 无 |
text | 普通文字 | para | 段落 |
figure | 图表 | 无 | 图片 |
head | 页眉 | page_header | 页眉 |
foot_pagenum | 页脚页码 | page | 页码 |